/* 
 * File:   Context.hpp
 * Author: Aaron
 *
 * Created on 25. Februar 2011, 18:40
 */

#ifndef CONTEXT_HPP
#define	CONTEXT_HPP


// -- Includes
#include "Types.hpp"


// -- Forward declaration of class 'Context' in header 'cl.hpp'.
//    'cl.hpp' is the C++ binding header of OpenCL and can be downloaded
//    from http://www.khronos.org.
namespace cl
{
    class Context;
}


/**
 * Contains wrapper classes for using OpenCL on the local machine.
 */
namespace OpenCLWrapping
{
    /**
     * Represents an OpenCL context
     */
    class Context
    {
        public:
            // -- Public Constructors & Destructors
            Context(const Context& _orig);
            virtual ~Context();
            
            // -- Public Methods
            Context& operator=(const Context& _other);

            // -- Public Static Methods
            // TODO Implement full constructors
            Context create(const vector<Device>& _devices);

            Context create(
                const vector<Device>& _devices,
                
            
        private:
            // -- Private Constructors
            Context(const cl::Context& _impl);

            // -- Private Methods
            cl::Context* getImpl();
            const cl::Context* getImpl() const;

            // -- Members
            cl::Context* m_Impl;
    };
}
#endif	/* CONTEXT_HPP */

